﻿using System;

class Program
{
	static void Main()
	{
		// 字面量（Literal）。
		{
			// 整数类型的字面量。
			sbyte a = -16; // 成功。
			byte b = 16; // 成功。
			short c = -12345; // 成功。
			ushort d = 34567; // 成功。
			int e = -100000000; // 成功。
			uint f = 3234567890; // 成功。

			//int e2 = 100000000u; // 失败。
			uint f2 = 100000000u;

			//long g = _;
			//ulong h = _;

			// 1、整数字面量的兼容规则：看数值是否超过左边变量类型的取值范围。
			// 2、整数字面量一般都有默认的数据类型：整数字面量默认为 int 类型。
			// 3、给字面量末尾加上 U 或 u 改变该字面量的类型为 uint 类型。
			// 4、给字面量末尾加上 L 或 l 改变该字面量的类型为 long 类型。
			// 5、给字面量末尾加上 LU 或 UL 或 lu 或 ul 改变该字面量的类型为 ulong 类型。
			// 6、一般不建议给整数字面量加上后缀。
		}

		{
			// 浮点字面量（小数字面量）。
			float a = 3.1415926F;
			double b = 3.1415926535897932384626433832795;
			decimal c = 3.1415926M;

			// 1、浮点字面量默认是 double 类型的。
			// 2、使用 F 或 f 后缀来强制让浮点字面量改成 float 类型。
			// 3、使用 M 或 m 后缀来强制让浮点字面量改成 decimal 类型。
			// 4、如果小数位过长，会被编译器按照当前数据类型的精度直接截断（Truncate）。

			// 科学计数法。
			double b2 = 1e6;
			//int i = 1e6;
			double b3 = 1e-6;
			double b4 = -1e-6;
			double b5 = 1.4e10;
			//double b6 = 1e1.4;
			float a2 = 1e6f;
			decimal c2 = 1.4e10m;

			// 1、科学计数法字面量的默认数据类型是 double 类型的，即使你给出的数据可能是一个整数。
			// 2、使用 aEb 或 aeb 表示 a * 10 的 b 次方。
			// 3、b 是可以带有 +/- 符号的。
			// 4、a 也是可以带有 +/- 符号的。
			// 5、a 和 b 里面，只有 a 可以带小数点，而 b 不能。
		}
	}
}